package cn.demoncat.util.websocket.entity;

import cn.demoncat.util.web.TokenUtil;
import cn.demoncat.util.web.entity.Access;
import cn.demoncat.util.websocket.util.WebSocketUtil;
import lombok.Data;

import javax.websocket.Session;

/**
 * 用户Session
 * 
 * <pre>
 * 1、客户端连接WS时，附带token参数，由WS服务端点读取token并获取userId、ctoken
 * 
 * 2、其它扩展字段需在onOpen中自己赋值：orgId、type
 * 
 * 3、客户端每次打开连接（刷新页面、重新连接、多标签页），都会创建新的会话
 * 
 * 4、1个orgId，有n个userId；1个userId，有n个token；1个token，有n个session
 * </pre>
 * 
 * @author 延晓磊
 *
 * @since 2020年5月18日
 */
@Data
public class UserSession{

	// 用户ID
	private Long userId;
	// 来源Token
	private String token;
	// 客户端原生Token
	private String ctoken;
	// WS Session
	private Session session;

	public UserSession() {
		super();
	}
	
	public UserSession(Session session) {
		super();
		this.session = session;
		this.token = WebSocketUtil.getToken(session);
		this.ctoken = TokenUtil.getClientToken(this.token);
		this.userId = TokenUtil.getTokenUser(this.token);
	}

	/**
	 * 转换为Access
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年5月18日
	 */
	public Access toAccess() {
		Access access = new Access();
		access.setToken(this.getToken());
		access.setUserId(this.getUserId());
		access.setCtoken(this.getCtoken());
		return access;
	}

	
}
